from day07.SingleLinkList import SingleLinkList
from day07.SingleNode import SingleNode

"""
比较顺序表和链表的性能效率对比：
操作                      顺序表             链表  
随机访问                   O(1)              O(N)
头部插入/删除元素           O(N)              O(1)
尾部插入/删除元素           O(1)              O(N)
中间插入/删除元素           O(N)              O(N)
内存利用率                 高（无额外开销）     低（有额外开销：元素域+链接域）                 
"""
if __name__ == '__main__':
    # # 创建节点类对象
    # sn1 = SingleNode(10)
    # sn2 = SingleNode(20)
    #
    # # 链表的第一个节点，指向：节点1
    # # sl1 = SingleLinkList(sn1)
    # # 链表的第一个节点，指向链表的第二个节点
    # sn1.next = sn2
    #
    # # 打印节点对象的属性值
    # print(sn1.item) # 打印第一个节点的属性值（数据域）  10
    # print(sn1.next) # 打印第一个节点的属性值（指针域），也就是第二个节点的内存地址 <day07.SingleNode.SingleNode object at 0x0000022BA9C131D0>
    #
    # # 打印第二个节点的属性值
    # print(sn2.item) # 打印第二个节点的属性值（数据域）  20
    # print(sn2.next) # 打印第二个节点的属性值（指针域），也就是第三个节点的内存地址 None

    # 创建链表对象
    sn1 = SingleNode(10)
    sn2 = SingleNode(20)
    sn1.next = sn2
    print(sn2)
    sn3 = SingleNode(30)
    sn2.next = sn3
    sl1 = SingleLinkList(sn1)

    # 判断链表是否为空链表对象
    print(f"链表是否为空：{sl1.is_empty()}")
    print(f"链表长度：{sl1.length()}")
    sl1.travel()

    print("--------------------")
    sl1.add(0)
    sl1.travel()
    print("--------------------")
    sl1.append(40)
    sl1.travel()
    print("--------------------")
    sl1.insert(2, 100)
    sl1.travel()
    print("--------------------")
    sl1.remove(40)
    sl1.travel()
    print("--------------------")
    print(sl1.search(50))
    # sl2 = SingleLinkList(None)
    # print(f"链表是否为空：{sl2.is_empty()}")
